iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
佛心分享-刷題不只是刷題

轉生理工組後從零開始的leetcode刷題系列 第 29

day-29[medium.2044]Count Number of Maximum Bitwise-OR Subsets

  • 分享至 

  • xImage
  •  

Given an integer array nums, find the maximum possible bitwise OR of a subset of nums and return the number of different non-empty subsets with the maximum bitwise OR.

An array a is a subset of an array b if a can be obtained from b by deleting some (possibly zero) elements of b. Two subsets are considered different if the indices of the elements chosen are different.

The bitwise OR of an array a is equal to a[0] OR a[1] OR ... OR a[a.length - 1] (0-indexed).


題目給咱一個整數陣列nums,找到其中某個子集合的最大可能位元運算OR,目標是返回具有這個最大位元OR的不同非空子集合數量。

題目給的子集合定義:陣列a是陣列b的子集合,a可以通過從b中刪除一些(也可以不刪)元素得到。當選取元素的索引不同時,兩個子集合被認為是不同的。

我的解題思路:
0. 總之先找出OR語法:原來就是很常用的“ | ”

  1. 計算nums中的所有可能子集合的OR
  2. 找到最大的位元OR
  3. 計算有多少個不同的非空子集合可以達到這個最大的位元OR值

class Solution {
    public int countMaxOrSubsets(int[] nums) {
        int maxOr = 0;
        int count = 0;
        
        // 最大OR值
        for (int num : nums) {
            maxOr |= num;  // 把目前數字的OR加到maxOr
        }
        // 以下參考自chatgpt
        count = countSubsets(nums, 0, 0, maxOr); 
        return count;
    }

    private static int countSubsets(int[] nums, int index, int currentOr, int maxOr) {
        // index:目前遍歷到的索引
        // currentOr:目前為止選擇的子集合的OR結果

        // 遍歷完所有後,檢查當前OR值是否等於maxOr
        if (index == nums.length) {
            return currentOr == maxOr ? 1 : 0;
        }
        // 遞迴計算 包含當前元素 和 不包含當前元素 的情況
        int in = countSubsets(nums, index + 1, currentOr | nums[index], maxOr); 
        int out = countSubsets(nums, index + 1, currentOr, maxOr);
        
        return in + out;
    }
}

題目雖然看得懂,但是實際開始寫程式的時候卻不知道該如何把思路表達成程式碼,最後還是依賴了AI
也許是我不熟悉二進制的邏輯閘運算吧?所以才手忙腳亂...總之一些相關的知識就邊做邊學吧!
https://ithelp.ithome.com.tw/upload/images/20241014/20169432FYY2KKtsd7.png


上一篇
day-28[medium.2134]minimum swaps to group all 1's together ll
下一篇
day-30[medium.1881]Maximum Value after Insertion
系列文
轉生理工組後從零開始的leetcode刷題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言